package SnakeGame;

import javax.microedition.lcdui.Graphics;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;

/**
 *
 * @author HOME
 */
public class Cobra {
    
    public static final int V = 6 ;
	private int[][] cobra ;
	public byte m;
	private int l;
	public boolean ok;   
	
	public Cobra(int max)
	{
		cobra = new int[max][2] ;
		init() ;
	}
	
	public void init()
	{
		l = 5 ;
		for(int i = 0 ; i < l ; i++)
		{
			cobra[i][0] = 120 ;
			cobra[i][1] = 160 ;
		}
		m = 1 ;
	}
	
	public void render(Graphics g)
	{
		g.setColor(0x425A8B) ;
		for(int i = 0 ; i < l ; i++)
		{
			g.fillArc(cobra[i][0] , cobra[i][1] , V , V , 0 , 360) ;
		}
	}
	
	public void guardandoDados(Ponto p , MC mc)
	{
		if(p.ehAtingido(cobra[0][0] , cobra[0][1]) == true)
		{
			l++ ;
			mc.pontuação += 10 ;
			p.reset(this) ;
		}
		
		
		for(int i = l-1 ; i > 0 ; i--)
		{
			cobra[i][0] = cobra[i-1][0] ;
			cobra[i][1] = cobra[i-1][1] ;
		}
		switch(m)
		{
		case 1 :
			cobra[0][1] -= V ;
			break ;
		case 2 :
			cobra[0][0] -= V ;
			break ;
		case 3 :
			cobra[0][1] += V ;
			break ;
		case 4 :
			cobra[0][0] += V ;
			break ;
		}
		
		if(ehAtingido(cobra[0][0] , cobra[0][1]) == true || 
		         cobra[0][0] < 0 || cobra[0][0] > 240 - V ||
			 cobra[0][1] < 0 || cobra[0][1] > 310 - V)
		{
			salvar(mc) ;
			mc.canvasIndex = 21 ;
		}
		
		ok = true ;
	}
	
	public void salvar(MC mc) 
	{
		byte[] data ;
		try {                
			RecordStore rs=RecordStore.openRecordStore("jj",true);
			if(rs.getNextRecordID()==1) 
						
			{
				for(int j = 0; j < mc.resultado.length; j++) 
				{
					mc.resultado[j]=0;
				}
			}
			else   
			{
				for(int j = 0; j < mc.resultado.length; j++)
				{
					data=rs.getRecord(j+1);  
					mc.resultado[j] = Ferramentas.toInt(data); 
				}
			}
			for(int j = 0; j < mc.resultado.length; j++)
			{
				if(mc.pontuação > mc.resultado[j])
				{
					for(int l = mc.resultado.length -1 ;l > j; l--)
					{
						mc.resultado[l]=mc.resultado[l-1];
					}
					mc.resultado[j]=mc.pontuação;
					break;
				}
			}
            
			if(rs.getNextRecordID()==1) 
			{
				for(int j = 0; j < 10; j++)
				{
					data = Ferramentas.toByte(mc.resultado[j]);
					rs.addRecord(data,0,data.length); 
	
				}
			}
			else   
			{
				for(int j = 0;j < 10; j++)
				{
					data = Ferramentas.toByte(mc.resultado[j]);  
					rs.setRecord(j+1,data,0,data.length); 
	
				}
			}
			rs.closeRecordStore();
		} catch (RecordStoreFullException e) {
			
			e.printStackTrace();
		} catch (RecordStoreNotFoundException e) {
			
			e.printStackTrace();
		} catch (RecordStoreException e) {
			
			e.printStackTrace();
		}
	}
	
	public boolean ehAtingido(int _x , int _y)
	{
		for(int i = 1 ; i < l ; i++)
		{
			if(Math.abs(cobra[i][0] - _x) < V &&
			   Math.abs(cobra[i][1] - _y) < V)
			{
				return true ;
			}
		}
		return false ;
	}

}
